package com.xu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 由于前端控制器对浏览器发送的请求进行了统一的处理，但是具体的请求有不同的处理过程，因此需要
 * 创建处理具体请求的类，即请求控制器。请求控制器中每一个处理请求的方法成为控制器方法
 * 因为 SpringMVC 的控制器由一个 POJO（普通的 Java 类）担任，因此需要通过 @Controller 注解将其标识
 * 为一个控制层组件，交给 Spring 的 IoC 容器管理，此时 SpringMVC 才能够识别控制器的存在
 *
 * springmvc 流程简单总结如下：
 *
 * 浏览器发送请求，若请求地址符合前端控制器的 url-pattern，该请求就会被前端控制器
 * DispatcherServlet 处理。前端控制器会读取 SpringMVC 的核心配置文件，通过扫描组件找到控制器，
 * 将请求地址和控制器中 @RequestMapping 注解的 value 属性值进行匹配，若匹配成功，该注解所标识的
 * 控制器方法就是处理请求的方法。处理请求的方法需要返回一个字符串类型的视图名称，该视图名称会
 * 被视图解析器解析，加上前缀和后缀组成视图的路径，通过 Thymeleaf 对视图进行渲染，最终转发到视
 * 图所对应页面
 */

@Controller
public class HelloController {

    @RequestMapping("/")
    public String index(){
        // 返回视图名称，即加上配置视图解析器时，指定的前缀和后缀
        return "index";
    }

    @RequestMapping("/target")
    public String toTarget(){
        return "target";
    }

}
